home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
lisp
/
eulisp
/
feel0_89.lha
/
Feel
/
README
Wrap
Text File
|
1993-07-28
|
4KB
|
109 lines
Welcome to Feel.
ftp.bath.ac.uk: /pub/eulisp/feel-0.89.tar.Z
Welcome to FEEL.
Compiling:
You ought to be able to type 'make install' in the source
directory, and get a working system (after changing some variables,
and selecting a configuration and doing make depend). The important
ones are FEEL_PATH, and the set involving your host. Read the Makefile
and the manual for the options that may need changing for your system.
You may need to do a 'make depend' to get the dependencies right
(Assuming you have X11), although this is not absolutely necessary.
To run Feel, use the script 'feel' in the bin directory. You will need
to edit FEEL_PATH here as well. If the system falls over while loading
the bytecodes (this is generally because you have compiled the system
without either sockets or full thread support), do 'feel -noimage'
instead. You may be able to build a bytecode interpreted system using
the compiler in this case.
The bytecode interpreter:
This exists, but is very experimental. The compiled image is supplied,
but your milage may vary. It will only work on BSD versions with
sockets selected. Any other needs to go through the bootstrap process.
Bootstrapping the system.
If you want to change the low-level method-dispatch system you should
edit gen-init.em in the Boot subdirectory, then run GNUmake (standard
make may not work) to get a new initialisation module. Note you
shouldn't need to change anything if you merely want eql-type methods.
See eql.em in the Modules directory for the appropriate code.
Extremely brief intro to EuLisp:
--------------------------------
Eulisp is a lisp dialect with the following features:
Reflective Object system
Telos replaces Common Lisp's defclass and defstruct with similarly
named constructions, which differ in syntax. Check the definition for
details (or defs.em for the real truth).
Module system
EuLisp code is generally written as a set of modules, with an explicit
interface. Two Modules cannot import each other --- the importation
graph has to be a DAG. In practice, this can be circumvented by
(ab)using generics.
Dynamic binding is different, as are the defining forms for (module)
global variables --- it is (deflocal foo <optional-value>).
There is also defconstant for defining immutable globals.
Read the definition for more details.
Brief intro to using feel:
--------------------------
Feel attempts to conform to the eulisp specification, but misses in
several respects. These bugs (both in Feel and the definition) are
being fixed.
Feel takes 2 important options:
-heap <n> runs feel with n meg of heap space --- general allocation area
-stack-space <n> runs feel with n meg of stack space --- 'C' and static
allocation area. If feel stops with 'stack space wimped out' increase
this parameter. The maximum value for both of these is 50Meg.
Feel is oganised into modules. Each module is a separate namespace,
and by default imports and exports no bindings. Initially you are in
the user module, which imports eulisp0, and a describe interface. An
important system module is the root module--- this is where,
conceptually at least modules are defined. Interpreted modules are
expected to have a '.em' suffix.
In any module,
(!> module-name) will enter a module, loading it if necessary. It
first looks for the file in the current directory, then down the
environment variable FEEL_LOAD_PATH. All bindings in that module then
become available. To interacively import one module into another, use
(import <mod-name>)
(!>> module-name) is the same as !>, except that it always loads the
module from disk.
(loaded-modules) gives the list of currently loaded modules (including
the internal ones, which are in turn re-exported by standard0).
(load-module module-name) will load the module and print the
resulting module. This is the easiest way of finding out what a module
exports. (Currently broken in feel 0.89)
(load-path) gives the current value of the load path (see above).
(set-load-path x) sets the load path.
The !> and !>> forms can be used anywhere, while the others can only
be invoked from the root module. !root will always return to the root
module.
Error handler:
!exit exits the error handler
!b gives a backtrace
!q gives a quick backtrace
(!cont <value>) will continue the last continuable error with the value
supplied.
(!B) May give a better backtrace, but is more unreliable.
pab@maths.bath.ac.uk